#include <errno.h>       /* obligatory includes */
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include "../Reseau.h"
#include "Client.h"
#include "../Message.h"


void Client::communiquer (const char* machine,const char* port,const Message message)
{
  printf("ENVOI DU MESSAGE\n");
  int taille=sizeof(Message);
  struct sockaddr_in adresse;
  int desc_socket;
  //struct hostent *hp;

  /* creation et attachement de la socket sur un port quelconque */
    Reseau r;

    if ((desc_socket=r.creer_socket()) == -1) {
      perror("erreur :");
      exit(2);
    }
    /* recherche de l'adresse internet du serveur */
    /*hp = gethostbyname(machine);
    if (hp == NULL) {
      fprintf(stderr,"Machine %s inconnue\n",machine);
      exit(3);
      }*/
    /* preparation de l'adresse destinatrice */
    adresse.sin_family = AF_INET;
    adresse.sin_port=htons(atoi(port));
    //adresse.sin_port = htons(3333);

    //memcpy(&(adresse.sin_addr.s_addr), hp->h_addr, hp->h_length);
     adresse.sin_addr.s_addr = inet_addr(machine);

    /* demande de connexion au serveur */
    if (connect(desc_socket,(struct sockaddr*) &adresse, sizeof(adresse)) == -1) {
      perror ("Connect");
      exit(4);
    }

  printf("Client :Connection à %s sur le port %d\n", inet_ntoa (adresse.sin_addr), htons(adresse.sin_port));
  printf("Client :envoi de données sur le socket %d\n ",desc_socket);

  int nbo;
  while (1) {

    nbo = send(desc_socket, &message, taille,MSG_NOSIGNAL);
    printf("taille %d, send %d\n",taille, nbo);
    if (nbo < 0) {
      perror("erreur dans le send");
      break;
    }
    break;
  }
  printf("\n");
  close(desc_socket);
  printf("MESSAGE ENVOYE\n");
}


